import 'package:flutter/material.dart';
import 'package:path/path.dart' as p;

/// 左侧面板里使用的“已安装 SDK 列表”
/// - 紧凑样式（仅展示最多 4 个）
/// - 支持设置为当前 SDK / 打开所在文件夹 / 移除
class InstalledList extends StatelessWidget {
  const InstalledList({
    super.key,
    required this.installed,
    required this.current,
    required this.onMakeCurrent,
    required this.onRevealInFinder,
    required this.onRemove,
  });

  /// 已安装 SDK 路径列表
  final List<String> installed;

  /// 当前选中的 SDK 路径（可能为空）
  final String? current;

  /// 点击某项时设置为“当前 SDK”的回调
  final ValueChanged<String> onMakeCurrent;

  /// 打开文件管理器并高亮 SDK 的回调
  final Future<void> Function(String) onRevealInFinder;

  /// 移除某个 SDK 的回调
  final ValueChanged<String> onRemove;

  /// 根据路径生成展示名
  /// - 压缩包：去掉扩展名（如 `.tar.gz`、`.zip`）
  /// - 普通目录：保持原名，避免错误去掉版本号里的 `.0`
  String _displayName(String fullPath) {
    final base = p.basename(fullPath); // 提取文件名部分（保留原大小写）
    final lower = base.toLowerCase();

    // 处理多级扩展名（优先匹配更长的，避免截断不完整）
    const multiExts = ['.tar.gz', '.tar.bz2', '.tar.xz', '.tar.zst'];
    for (final ext in multiExts) {
      if (lower.endsWith(ext)) {
        return base.substring(0, base.length - ext.length);
      }
    }

    // 处理单级扩展名
    const singleExts = [
      '.tgz',
      '.tbz2',
      '.txz',
      '.zip',
      '.tar',
      '.bz2',
      '.xz',
      '.zst',
      '.7z',
      '.rar',
    ];
    for (final ext in singleExts) {
      if (lower.endsWith(ext)) {
        return base.substring(0, base.length - ext.length);
      }
    }

    // 普通路径（不是压缩包） -> 原样返回
    return base;
  }

  @override
  Widget build(BuildContext context) {
    final cs = Theme.of(context).colorScheme;

    // 空列表时提示“没有 SDK”
    if (installed.isEmpty) {
      return Text('No SDKs', style: Theme.of(context).textTheme.bodySmall);
    }

    // 最多只展示 4 条（避免面板过长）
    final preview = installed.take(4).toList();

    return ListView.builder(
      itemCount: preview.length,
      itemBuilder: (c, i) {
        final path = preview[i];
        final isCurrent = path == current;

        return Padding(
          padding: const EdgeInsets.symmetric(vertical: 6.0), // 每项上下留间距
          child: InkWell(
            // 点击整行 -> 设置为当前 SDK
            onTap: () => onMakeCurrent(path),
            child: Row(
              children: [
                /// 左侧选择框图标
                Icon(
                  isCurrent
                      ? Icons.check_box_outlined
                      : Icons.check_box_outline_blank_sharp,
                  size: 18,
                  color: isCurrent ? cs.primary : null,
                ),
                const SizedBox(width: 8),

                /// 中间：SDK 路径名（自动省略溢出）
                Expanded(
                  child: Text(
                    _displayName(path),
                    style: Theme.of(context).textTheme.bodySmall,
                    maxLines: 1,
                    overflow: TextOverflow.ellipsis,
                  ),
                ),

                /// 打开文件夹按钮
                IconButton(
                  iconSize: 18,
                  onPressed: () => onRevealInFinder(path),
                  icon: const Icon(Icons.open_in_new),
                  tooltip: 'Reveal',
                ),

                /// 移除按钮
                IconButton(
                  iconSize: 18,
                  onPressed: () => onRemove(path),
                  icon: const Icon(Icons.delete_outline),
                  tooltip: 'Remove',
                ),
              ],
            ),
          ),
        );
      },
    );
  }
}
